﻿// owner 蒋家伟

#include "ElementIdGenerator.h"

#include "Dbg_Warn_Define.h"

namespace
{
    constexpr int64_t s_commonStartId = 18'0000'0000'0000;
    constexpr int64_t s_tempStartId = 48'0000'0000'0000;
    constexpr int64_t s_EndId = 58'0000'0000'0000;
}

using namespace jsdk;

jsdk::ElementIdGenerator::ElementIdGenerator() :
    m_commonId(s_commonStartId),
    m_tempId(s_tempStartId)
{
}

jsdk::ElementId jsdk::ElementIdGenerator::getCommonValidId()
{
    DBG_WARN_AND_RETURN_UNLESS(m_commonId + 1 == s_tempStartId, ElementId::s_InvalidId ,L"element对象数量过大，请联系管理员对文档做整体的升级", L"蒋家伟", L"2023-12-18");
    return ElementId(++m_commonId);
}

jsdk::ElementId jsdk::ElementIdGenerator::getTempValidId()
{
    DBG_WARN_AND_RETURN_UNLESS(m_tempId + 1 == s_EndId, ElementId::s_InvalidId, L"element对象数量过大，请联系管理员对文档做整体的升级", L"蒋家伟", L"2023-12-18");
    return ElementId(++m_tempId);
}

bool jsdk::ElementIdGenerator::UpdateCommonId(const ElementId& commonId)
{
    DBG_WARN_AND_RETURN_FALSE_UNLESS(commonId.toValue() < s_tempStartId && commonId.toValue() > s_commonStartId, L"element对象数量过大，请联系管理员对文档做整体的升级", L"蒋家伟", L"2023-12-18");
    m_commonId = std::max(commonId.toValue(), m_commonId);
    return true;
}

bool jsdk::ElementIdGenerator::UpdateTempId(const ElementId& tempId)
{
    DBG_WARN_AND_RETURN_FALSE_UNLESS(tempId.toValue() < s_EndId && tempId.toValue() > s_tempStartId, L"element对象数量过大，请联系管理员对文档做整体的升级", L"蒋家伟", L"2023-12-18");
    m_tempId = std::max(tempId.toValue(), m_tempId);
    return true;
}
